package com.gxa.xiaoucomeshome.mapper;

import com.gxa.xiaoucomeshome.vo.*;
import com.gxa.xiaoucomeshome.pojo.Address;
import io.swagger.models.auth.In;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

public interface UserManagerMapper {
    /**
     * 用户信息 导出
     */
    List<UserManagerVo> selectAllByPage();

    /**
     * 模糊查询用户信息
     * @param page
     * @param size
     * @param name (包含用户姓名和手机)
     * @param state
     * @param site_id
     * @return
     */
    List<UserManagerVo> selectAllByNameAndPhone(@Param("page") Integer page,
                                                @Param("size") Integer size,
                                                @Param("name") String name,
                                                @Param("state")Integer state,
                                                @Param("site_id")Integer site_id);
    //   @Param("phone")String phone
// 用户信息总条数
    Integer selectUserManageCount( @Param("name") String name,@Param("state")Integer state, @Param("site_id")Integer site_id);

    /**
     * 查询用户基本信息
     * @param id
     * @return
     */
    List<UserManagerVo> selectManagerById(Integer id);
//    /**
//     * 冻结用户状态
//     * @param id
//     * @return
//     */
//    Integer updateUserState(Integer id);
//
//    /**
//     * 解冻用户状态
//     * @param id
//     * @return
//     */
//    Integer updateOutState(Integer id);

    /**
     * 批量冻结用户状态
     * @param id
     * @return
     */
    Integer updateAllState(Integer id);

    /**
     * 批量解冻用户状态
     * @param id
     * @return
     */
    Integer updateOutALlState(Integer id);

    /**
     * 查询用户地址
     * @param id
     * @return
     */
    List<Address> selectUserAddress(Integer id);

    /**
     * 查询用户订单详情并分页
     * @param page
     * @param size
     * @param id
     * @return
     */
    List<UserOrderDetailVo> selectUserOrder(@Param("page") Integer page,
                                            @Param("size") Integer size,
                                            @Param("id") Integer id);

    //用户订单总条数
    Integer selectUserCount(@Param("id") Integer id);

    /**
     * 昵称，收货人，收货人电话，配送员进行模糊查询用户订单详情
     * @return
     */
    List<UserOrderDetailVo> selectUserByNameAndPhone(@Param("page") Integer page,
                                                     @Param("size") Integer size,
                                                     @Param("all") String all,
                                                     @Param("state") Integer state,
                                                     @Param("site_id") Integer site_id,
                                                     @Param("startdispatch_time") Date startdispatch_time,
                                                     @Param("enddispatch_time") Date enddispatch_time
    );

    Integer selectByNameCount(@Param("all") String all,
                              @Param("state") Integer state,
                              @Param("site_id") Integer site_id,
                              @Param("startdispatch_time") Date startdispatch_time,
                              @Param("enddispatch_time") Date enddispatch_time);
    /**
     * 查询所有订单用户导出
     * @return
     */
    List<UserOrderDetailVo> selectAllOrder();
    /**
     * 删除用户信息
     * @param order_id
     * @return
     */
//    int deleteUserManagerByOrderId(String order_id);

    /**
     * 批量删除用户订单信息
     * @param order_id
     * @return
     */
    int deleteUserManagerByOrderIdAll(String[] order_id);

    //单个
    int deleteUser(String order_id);

    /**
     * 查询订单详情
     * @param order_id
     * @return
     */
    List<UserOrderDetailUpdateVo> selectUserOrderDetailAll(String order_id);

    /**
     * 查询物料详情
     * @param page
     * @param size
     * @param materials_name
     * @param site_id
     * @return
     */
    List<MaterialsVo> selectMaterialsAll(@Param("page") Integer page,
                                         @Param("size") Integer size,
                                         @Param("materials_name") String materials_name,
                                         @Param("site_id") Integer site_id);

    //物料总数
    Integer selectMaterialsCount( @Param("materials_name") String materials_name,
                                  @Param("site_id") Integer site_id);
    /**
     * 删除物料
     * @return
     */
    int deleteMaterials(Integer materials_id);

    /**
     * 添加物料
     */
    void insertMaterials(@Param("materials_name") String materials_name,
                         @Param("materials_num") Integer materials_num,
                         @Param("materials_unit") String materials_unit,
                         @Param("materials_cost") Double materials_cost,
                         @Param("materials_price") Double materials_price,
                         @Param("site_id") Integer site_id);

    /**
     * 修改物料信息
     * @param materials_name
     * @param materials_num
     * @param materials_unit
     * @param materials_cost
     * @param materials_price
     * @param site_id
     */
    void updateMaterials(@Param("materials_id") Integer materials_id,
                         @Param("materials_name") String materials_name,
                         @Param("materials_num") Integer materials_num,
                         @Param("materials_unit") String materials_unit,
                         @Param("materials_cost") Double materials_cost,
                         @Param("materials_price") Double materials_price,
                         @Param("site_id") Integer site_id);

    /**
     * 物料编辑接口
     */
    List<MaterialsVo> editMaterials(Integer materials_id);

    /**
     * 操作员编辑接口
     * @param admin_id
     * @return
     */
    List<AdminRoleVo> editAdminRoleVo(Integer admin_id);

    /**
     * 角色编辑接口
     * @param role_id
     * @return
     */
    List<RoleVo> editRoleVo(Integer role_id);
}
